编译器通常分为两部分:前端和后端。本章中，我们将实现一个程序设计语言的前端，就是处理源语言的部分。我们将学习实际的编译器使用的技术，并应用到我们自己的编程语言中。\par

我们将从定义编程语言的语法开始，并以抽象语法树(AST)结束(将是代码生成的基础)。您可以将此方法用于任何想要为其实现编译器的编程语言。\par

本章中，您将学习以下主题:\par


\begin{itemize}
\item 定义一种编程语言——tinylang语言，它是编程语言的子集，必须为它实现一个编译器前端。
\item 为编译器创建项目布局。
\item 管理源文件和用户消息，这使您了解如何处理多个输入文件，以及如何以一种友善的方式告知用户问题所在。
\item 构建词法分析器，讨论如何将词法分析器分解成模块部分。
\item 构建递归下降解析器，讨论从语法派生解析器，以及执行语法分析时可以使用的规则。
\item 使用bison和flex解析器和分析器，其中您将使用工具根据规范轻松地生成解析器和分析器。
\item 执行语义分析，您将创建AST并评估其属性，这会与解析器有一些交集。
\end{itemize}

有了本章学到的技能，您将能够为任何编程语言构建编译器前端。\par